"""
测试运行脚本

用于运行所有单元测试或指定模块的测试
使用方法:
    python run_tests.py          # 运行所有测试
    python run_tests.py geometry # 只运行几何模块测试
    python run_tests.py core     # 只运行核心模块测试
    python run_tests.py physics  # 只运行物理模块测试
    python run_tests.py utils    # 只运行工具模块测试
"""

import unittest
import sys
from pathlib import Path

def run_tests(test_module=None):
    """
    运行测试
    
    参数:
        test_module (str): 要测试的模块名称,为None时运行所有测试
    """
    # 添加项目根目录到Python路径
    project_root = Path(__file__).parent.parent
    sys.path.append(str(project_root))
    
    # 创建测试加载器
    loader = unittest.TestLoader()
    
    # 确定测试目录
    if test_module:
        test_dir = Path(__file__).parent / f"test_{test_module}"
        if not test_dir.exists():
            print(f"错误: 未找到测试模块 '{test_module}'")
            print("可用的测试模块: geometry, core, physics, utils")
            sys.exit(1)
    else:
        test_dir = Path(__file__).parent
        
    # 发现并加载测试
    suite = loader.discover(
        start_dir=str(test_dir),
        pattern='test_*.py'
    )
    
    # 创建测试运行器
    runner = unittest.TextTestRunner(verbosity=2)
    
    # 运行测试
    result = runner.run(suite)
    
    # 返回测试结果
    return result.wasSuccessful()

def print_test_summary(module_name=None):
    """打印测试摘要信息"""
    if module_name:
        print(f"\n运行 {module_name} 模块的测试...")
    else:
        print("\n运行所有测试...")
    print("="*50)

if __name__ == '__main__':
    # 获取命令行参数
    module = sys.argv[1] if len(sys.argv) > 1 else None
    
    # 打印测试摘要
    print_test_summary(module)
    
    # 运行测试
    success = run_tests(module)
    
    # 根据测试结果设置退出码
    sys.exit(0 if success else 1) 